﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Common;
using BusinessLayer;
using BoletoElectronicoDesktop.AbmBeneficiarios;

namespace BoletoElectronicoDesktop.PagoEmpresas
{
    public partial class FormPago : FormListDelete
    {

        public FormPago(Common.Util.Funcionalidad Use)
        : base(Use)
        {
            
            InitializeComponent();
            btnPay.Enabled = false;
            errSum = new ErrorSummary();
            errSum.ErrorListChanged += new ErrorSummary.ErrorListChangeHandler(errSum_ErrorListChanged);
        }

        void errSum_ErrorListChanged(object o, ErrorSummaryChangedEventArgs e)
        {
            if (errSum.HayErrores())
            {
                btnPay.Enabled = false;
            }
            else
            {
                btnPay.Enabled = true;
            }
        }

        public ErrorSummary errSum { get; set; }
        public int SelectedBnf { get; set; }
        private int selectedId;
        public int SelectedId
        {
            get
            {
                try
                {
                    if ((dsBoleto.ClienteRow)((DataRowView)(dgwPago.CurrentRow.DataBoundItem)).Row != null)
                    {
                        selectedId = int.Parse(((dsBoleto.ClienteRow)((DataRowView)(dgwPago.CurrentRow.DataBoundItem)).Row)["IdTarjeta"].ToString());
                    }
                }
                catch (Exception)
                {
                    selectedId = 0;
                }
                return selectedId;
            }
            set
            { selectedId = value; }
        }

        private void dgwCliente_SelectionChanged(object sender, EventArgs e)
        {
            OnDGWSelectedItem();
        }

        private void OnDGWSelectedItem()
        {
            dsBoleto.ClienteRow ur = (dsBoleto.ClienteRow)((DataRowView)(dgwPago.CurrentRow.DataBoundItem)).Row;
            switch (dgwPago.CurrentCell.ColumnIndex)
            {

                default:
                    break;
            }
        }

        private void OnDGWDeselectedItem()
        {
            SelectedId = 0;
        }

        private void dgwCliente_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
                OnDGWSelectedItem();
        }

        private void FormPago_Load(object sender, EventArgs e)
        {
            cmbBnf.DataSource = BizBeneficiario.getBeneficiarios();
        }

        private void btnBnf_Click(object sender, EventArgs e)
        {
            BuscadorBeneficiario frm;
            if (this.MdiParent.MdiChildren.Any(f => f is BuscadorBeneficiario))
            {
                frm = (BuscadorBeneficiario)this.MdiParent.MdiChildren.First(f => f is BuscadorBeneficiario);
            }
            else
            {
                frm = new BuscadorBeneficiario(Util.Funcionalidad.BeneficiarioConsulta, false);
                frm.MdiParent = this.MdiParent;
            }

            frm.Show();
            int BnfSelected;
            if ((BnfSelected = SelectedBnf) != 0)
            {
                cmbBnf.SelectedValue = SelectedBnf;
            }
        }

        private void dtpDesde_Validating(object sender, CancelEventArgs e)
        {
            int IdBnf = int.Parse(cmbBnf.SelectedValue.ToString());
            bool HayBnf = IdBnf > 0;
            bool IsFechaDesdeValid = false;
            bool noOk = true;

            StringBuilder sb = new StringBuilder();
            bool DesdeEsMenor = dtpDesde.Value <= dtpHasta.Value;
            if (!DesdeEsMenor)
            {
                sb.AppendLine("Fecha desde no puede ser mayor que Fecha hasta.");
            }
            if (HayBnf)
            {
                IsFechaDesdeValid = BizPago.ValidateDateFrom(IdBnf, dtpDesde.Value);
                if (!IsFechaDesdeValid)
                    sb.AppendLine("Esta fecha desde no esta permitida. Se pisa con otra fecha desde.");
                noOk = !IsFechaDesdeValid || !DesdeEsMenor;
            }
            else
            {
                sb.AppendLine("Aun no ha elegido un beneficiario.");
            }

            if (noOk)
            {
                errProv.SetError(dtpDesde, sb.ToString());
                errSum.AddOrOverwriteItem(dtpDesde, sb.ToString());
            }
            else
            {
                errSum.RemoveItem(dtpDesde);
                errProv.SetError(dtpDesde, string.Empty);
            }

            lblErr.Visible = errSum.HayErrores();

            lblErr.Text = errSum.ToString();
        }

        private void dtpHasta_Validating(object sender, CancelEventArgs e)
        {
            int IdBnf = int.Parse(cmbBnf.SelectedValue.ToString());
            bool HayBnf = IdBnf > 0;
            bool IsFechaHastaValid = false;
            bool noOk = true;

            StringBuilder sb = new StringBuilder();
            bool HastaEsMayor = dtpDesde.Value <= dtpHasta.Value;
            if (!HastaEsMayor)
            {
                sb.AppendLine("Fecha desde no puede ser mayor que Fecha hasta.");
            }
            if (HayBnf)
            {
                IsFechaHastaValid = BizPago.ValidateDateTo(IdBnf, dtpHasta.Value);
                if (!IsFechaHastaValid)
                    sb.AppendLine("Esta fecha hasta no esta permitida. Se pisa con otra fecha hasta.");
                noOk = !IsFechaHastaValid && !HastaEsMayor;
            }
            else
            {
                sb.AppendLine("Aun no ha elegido un beneficiario.");
            }

            if (noOk)
            {
                errProv.SetError(dtpHasta, sb.ToString());
                errSum.AddOrOverwriteItem(dtpHasta, sb.ToString());
            }
            else
            {
                errSum.RemoveItem(dtpHasta);
                errProv.SetError(dtpHasta, string.Empty);
            }

            lblErr.Visible = errSum.HayErrores();

            lblErr.Text = errSum.ToString();
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {

            StringBuilder sb = new StringBuilder();
            bool HastaEsMayor = dtpDesde.Value <= dtpHasta.Value;
            if (!HastaEsMayor)
            {
                sb.AppendLine("Fecha desde no puede ser mayor que Fecha hasta.");
            }
            bool BothOk = BizPago.ValidateDates(int.Parse(cmbBnf.SelectedValue.ToString()), dtpDesde.Value, dtpHasta.Value);
            if (!BothOk)
            {
                sb.AppendLine("En este intervalo de desde/hasta hay fechas que ya se pagaron.");

            }
            dsBoleto ds = BizPago.PagoGet(int.Parse(cmbBnf.SelectedValue.ToString()), dtpDesde.Value, dtpHasta.Value);
            errProv.SetError(dtpDesde, sb.ToString());
            errProv.SetError(dtpHasta, "Idem");
            errSum.AddOrOverwriteItem(dtpDesde, sb.ToString());
            errSum.AddOrOverwriteItem(dtpHasta, "Fecha Desde y Fecha hasta ");

            lblErr.Visible = errSum.HayErrores();

            lblErr.Text = errSum.ToString();

            if (!errSum.HayErrores())
                dgwPago.DataSource = ds.Compra;
        }

        private void btnPay_Click(object sender, EventArgs e)
        {
            if (UserAllowed(Util.Funcionalidad.PagoAlta))
            {
                BizPago.PagoSet(int.Parse(cmbBnf.SelectedValue.ToString()), dtpDesde.Value, dtpHasta.Value);
            }
            else
            {
                MessageBox.Show("Usted no tiene los privilegios para realizar esta operacion.");
            }
        }



    }
}
